package cl.minvu.catastro;

import java.util.Date;
import java.util.UUID;

import org.json.JSONObject;
import org.switchyard.component.bean.Service;

import cl.minvu.catastro.manager.EncuestadorManager;
import cl.minvu.catastro.model.Encuestador;
import cl.minvu.catastro.util.CastUtil;
import cl.minvu.catastro.util.Constantes;
import cl.minvu.catastro.util.SecurityUtil;

/**
 * @author psep
 * 
 */
@Service(ConsultaToken.class)
public class ConsultaTokenBean implements ConsultaToken {

	@Override
	public String consultaToken(String mensaje) {
		String mensajeDecode = SecurityUtil.decode(mensaje);
		Encuestador encuestador = CastUtil.getEncuestador(mensajeDecode);

		if (encuestador == null) {
			return SecurityUtil.encode(Constantes.ERROR_INPUT);
		} else if (EncuestadorManager.getInstance().countByRun(encuestador) == 0) {
			encuestador.setToken(UUID.randomUUID().toString());
			encuestador = this.creaEncuestador(encuestador);

			if (encuestador == null) {
				return SecurityUtil.encode(Constantes.ERROR_INTERNO);
			} else {
				return this.getJSONEncuestador(encuestador);
			}

		} else {
			encuestador = EncuestadorManager.getInstance().getEncuestador(
					encuestador);

			if (encuestador == null) {
				return SecurityUtil.encode(Constantes.ERROR_VALIDA_DATOS);
			} else if (encuestador.getFechaterminovigencia().before(new Date())) {
				return SecurityUtil.encode(Constantes.ERROR_TOKEN);
			} else {
				return this.getJSONEncuestador(encuestador);
			}
		}
	}

	/**
	 * @param encuestador
	 * @return
	 */
	private String getJSONEncuestador(Encuestador encuestador) {
		JSONObject json = new JSONObject();
		json.put("token", encuestador.getToken());
		json.put("nombres", encuestador.getPersona().getNombres());
		json.put("apellidoPaterno", encuestador.getPersona().getApellidopaterno());
		json.put("apellidoMaterno", encuestador.getPersona().getApellidomaterno());

		return SecurityUtil.encode(json.toString());
	}

	/**
	 * @param encuestador
	 * @return
	 */
	private Encuestador creaEncuestador(Encuestador encuestador) {
		if (!EncuestadorManager.getInstance().createEncuestador(encuestador)) {
			return null;
		} else {
			return encuestador;
		}
	}

}
